Encoder.c
#include "Encoder.h"
#include <stdio.h>
/* Initialisation of the encoder_t structure
* Arguments:
* _pin1 - First pin of the encoder (MCU Pin)
* _pin2 - Second pin of the encoder (MCU Pin)
*/
void init_encoder(encoder_t* Encoder, pin_t _pin1, pin_t _pin2)
{
Encoder->pin1 = _pin1;
Encoder->pin2 = _pin2;
/******* MCU PINS SETTING ********/
pin_mode(_pin1, INPUT);
pin_mode(_pin1, INPUT);
}
/* Read encoder Pins
*
*/
void update_enc_state(encoder_t* Encoder)
{
Encoder->dir = (pin_read(Encoder->pin2) << 1);
Encoder->dir |= pin_read(Encoder->pin1);
switch(Encoder->dir)
{
case R_TICK:
{
if(!Encoder->tick_registered)
{
Encoder->ticks_RIGHT++;
Encoder->tick_registered = HIGH;
}
}break;
case L_TICK:
{
if(!Encoder->tick_registered)
{
Encoder->ticks_LEFT++;
Encoder->tick_registered = HIGH;
}
}break;
case NO_TICK:
{
Encoder->tick_registered = LOW;
}break;
}
}
/* More for debug purposes
*
*/
/*void print_enc_state(encoder_t* Encoder)
{
char str[16];
sprintf(str, "Enc State: ");
print_str(str);
switch(Encoder->dir)
{
case R_TICK:
{
sprintf(str, "R_TICK\n");
print_str(str);
} break;
case L_TICK:
{
sprintf(str, "L_TICK\n");
print_str(str);
} break;
case NO_TICK:
{
sprintf(str, "NO_TICK\n");
print_str(str);
} break;
default:
{
sprintf(str, "%d", Encoder->dir);
print_str(str);
}
}
} */